{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6491e7ed",
   "metadata": {},
   "source": [
    "## 0. 前置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fd60dcdd",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f37800aa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>班级</th>\n",
       "      <th>性别</th>\n",
       "      <th>姓名</th>\n",
       "      <th>账号类别</th>\n",
       "      <th>课堂问答</th>\n",
       "      <th>课堂纪律</th>\n",
       "      <th>作业和测验</th>\n",
       "      <th>实验</th>\n",
       "      <th>出勤情况</th>\n",
       "      <th>期末考试</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>学号</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>190110840206</th>\n",
       "      <td>19财会2</td>\n",
       "      <td>女</td>\n",
       "      <td>次旺措姆</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>60</td>\n",
       "      <td>69.5</td>\n",
       "      <td>90</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>190110840208</th>\n",
       "      <td>19财会2</td>\n",
       "      <td>女</td>\n",
       "      <td>方诗琦</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>90</td>\n",
       "      <td>92.0</td>\n",
       "      <td>100</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>190110840210</th>\n",
       "      <td>19财会2</td>\n",
       "      <td>女</td>\n",
       "      <td>何卓婧</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>92</td>\n",
       "      <td>92.0</td>\n",
       "      <td>100</td>\n",
       "      <td>73</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 班级 性别    姓名  账号类别  课堂问答  课堂纪律  作业和测验    实验  出勤情况  期末考试\n",
       "学号                                                                     \n",
       "190110840206  19财会2  女  次旺措姆     2   NaN   NaN     60  69.5    90    35\n",
       "190110840208  19财会2  女   方诗琦     2   NaN   NaN     90  92.0   100    61\n",
       "190110840210  19财会2  女   何卓婧     2   NaN   NaN     92  92.0   100    73"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_cjd_2 = pd.read_excel(r'C:/Users/zhengyang/learning/python/src/data/成绩单_2.xlsx',index_col=1)\n",
    "df_cjd_2.tail(3)\n",
    "df_cjd_2.fillna"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0c75d90c",
   "metadata": {},
   "source": [
    "## 2. 删除全等列(比如一列的值全是1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a4b64638",
   "metadata": {},
   "outputs": [],
   "source": [
    "equal_list = []\n",
    "sr_std = df_cjd_2.describe().loc['std']\n",
    "for idx, val in zip(sr_std.index, sr_std.values):\n",
    "    if val == 0:\n",
    "        equal_list.append(idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a97acd35",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_cjd_2.drop(equal_list, axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3de68495",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除了账号类别\n",
    "df_cjd_2.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0f8d86c",
   "metadata": {},
   "source": [
    "## 3. 删除重复行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2ad249d1",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_cjd_3 = df_cjd_2.copy()\n",
    "a = df_cjd_3.iloc[-1, :].copy()\n",
    "a['期末考试']=100\n",
    "df_cjd_3 = pd.concat([df_cjd_3, a.to_frame().T], ignore_index=True)\n",
    "df_cjd_3 = pd.concat([df_cjd_3, df_cjd_3.iloc[-2, :].to_frame().T], ignore_index=True)\n",
    "df_cjd_3.tail(4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15239084",
   "metadata": {},
   "source": [
    "### 3.1 drop_duplicates()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c3901448",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除重复行\n",
    "df_cjd_3.drop_duplicates(inplace=True)\n",
    "df_cjd_3.tail(3) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1b574107",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除姓名重复行\n",
    "df_cjd_3.drop_duplicates(subset=['姓名'],inplace=True)\n",
    "df_cjd_3.tail(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7bd6878",
   "metadata": {},
   "source": [
    "### 3.2 Series有unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "72fa594c",
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.Series([1,2,3,2,3,2,3,2,3]).unique()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea7f9060",
   "metadata": {},
   "source": [
    "## 4. 去除重复列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0f25bbb5",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_cjd_4 = df_cjd_2.copy()\n",
    "df_cjd_4['1aaa'] = df_cjd_4['班级']\n",
    "df_cjd_4.tail(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a0699ccd",
   "metadata": {},
   "outputs": [],
   "source": [
    "def remove_duplicate_columns(df):\n",
    "    df_t = df.T\n",
    "    df_t.drop_duplicates(inplace=True)\n",
    "    return df_t.T\n",
    "\n",
    "df_cjd_4 = remove_duplicate_columns(df_cjd_4)\n",
    "df_cjd_4.tail(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5731b890",
   "metadata": {},
   "source": [
    "## 5. 缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bd0d2770",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_cjd_5 = df_cjd_2.copy()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45550002",
   "metadata": {},
   "source": [
    "### 5.1 检查缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e7a088d0",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_cjd_5.isnull().tail(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcaa0dbc",
   "metadata": {},
   "source": [
    "### 5.2 删除法处理\n",
    "#### 5.2.1 count法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "048b6803",
   "metadata": {},
   "outputs": [],
   "source": [
    "null_cols = []\n",
    "df_cjd_5.count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5e801428",
   "metadata": {},
   "outputs": [],
   "source": [
    "for idx, val in zip(df_cjd_5.count().index, df_cjd_5.count().values):\n",
    "    if val == 0:\n",
    "        null_cols.append(idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e3055419",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_cjd_5.drop(labels=null_cols, axis = 1, inplace =True)\n",
    "df_cjd_5.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c697f07",
   "metadata": {},
   "source": [
    "#### 5.2.2 dropna()推荐"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "06833ba0",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_cjd_5.dropna(axis=1, how='any', inplace=True)\n",
    "df_cjd_5.tail(3)\n",
    "\n",
    "#how 取值‘any’表示只要含缺失值，该特征列就删除；\n",
    "#how 取值‘all’表示只有全部元素都是缺失值，该特征列就删除；"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18e5957d",
   "metadata": {},
   "source": [
    "### 5.3 替代法处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a1f587cb",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'df_cjd_5' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mNameError\u001b[39m                                 Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mdf_cjd_5\u001b[49m.fillna(-\u001b[32m1\u001b[39m, inplace=\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[32m      2\u001b[39m df_cjd_5.tail(\u001b[32m3\u001b[39m)\n",
      "\u001b[31mNameError\u001b[39m: name 'df_cjd_5' is not defined"
     ]
    }
   ],
   "source": [
    "df_cjd_5.fillna(-1, inplace=True)\n",
    "df_cjd_5.tail(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d7486fd",
   "metadata": {},
   "source": [
    "### 5.4 插值法处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "22e9eba0",
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.interpolate import interp1d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c6e9c468",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Yk9HQAEA2KagsMhcTmz1PGkaFaTJ97SRnw9fTSCgAABs5OvjrTG9Gisuopq5nDgo0M/ukuCqAWXZsmXq16+foqOjzRDcnDlzSvfl5+fr2WefVatWrVStWjVzzH333aeDBw+WeY369eubnz1zmThxYsW8IwCAS+ndIkrfjO6m2iFV7C4FrhxQsrOzFR8fr8mTJ5+178SJE1q3bp1eeOEF8/j5558rMTFRt95661nHjh8/XocOHSpdRo0adenvAgDg0jitg5/zVTn16dPHLOcSEhKihQsXltn21ltvqWPHjtq3b5/q1q1buj0oKEhRUVHl/eUBAIAHqPTImp6ebk7hhIaGltlundIJDw9XmzZt9Nprr6mgoOC8r5Gbm6uMjIwyCwAAcF/lHkEpj5ycHDMnZeDAgQoODi7d/thjj6lt27YKCwvTihUrNHbsWHOa54033jjn60yYMEHjxo2rzFIBAICDeBUXFxdf8g97eWn27Nnq37//WfusCbMDBgzQ/v37tWTJkjIB5efef/99Pfzww8rKylJAQMA5R1CspYQ1ghIbG2tGZy70ugAAwDms729rOsjFfH9XygiKFU7uuusu7d27V4sXL/7FIjp16mRO8ezZs0dNmjQ5a78VWs4VXAAAgHvyraxwsmPHDv3vf/8z80x+yYYNG+Tt7a3IyMiKLgcAAHhCQLFOwyQlJZWu79692wQMaz5J7dq1dccdd5hLjOfPn6/CwkKlpKSY46z9/v7+WrlypVavXq0bbrjBXMljrY8ePVqDBw9WjRo1KvbdAQAAz5iDYs0nscLFzw0ZMkQvvfSS4uLizvlz1mhK9+7dTXh59NFHtX37djOvxDr+3nvv1ZgxYy76NE55zmEBAABnKM/392VNkrULAQUAANdTnu9vWvcBAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADHIaAAAADXDyjLli1Tv379FB0dLS8vL82ZM6fM/uLiYr344ouqXbu2qlSpop49e2rHjh1ljjl27JgGDRqk4OBghYaGatiwYcrKyrr8dwMAADwzoGRnZys+Pl6TJ08+5/5XX31Vf/vb3zR16lStXr1a1apVU+/evZWTk1N6jBVOtmzZooULF2r+/Pkm9Dz00EOX904AAIDb8Cq2hjwu9Ye9vDR79mz179/frFsvZY2sPPnkk3rqqafMtvT0dNWqVUvTp0/X3XffrW3btql58+Zas2aN2rdvb45ZsGCB+vbtq/3795uf/yUZGRkKCQkxr22NwgAAAOcrz/d3hc5B2b17t1JSUsxpnRJWIZ06ddLKlSvNuvVondYpCScW63hvb28z4nIuubm55k2duQAAAPdVoQHFCicWa8TkTNZ6yT7rMTIyssx+X19fhYWFlR7zcxMmTDBBp2SJjY2tyLIBAIDDuMRVPGPHjjXDQSVLcnKy3SUBAABXCShRUVHmMTU1tcx2a71kn/WYlpZWZn9BQYG5sqfkmJ8LCAgw56rOXAAAgPuq0IASFxdnQsaiRYtKt1nzRay5JZ07dzbr1uPx48eVkJBQeszixYtVVFRk5qoAAAD4lvcHrH4lSUlJZSbGbtiwwcwhqVu3rp544gm9/PLLuuqqq0xgeeGFF8yVOSVX+jRr1kw33XSTHnzwQXMpcn5+vkaOHGmu8LmYK3gAAID7K3dAWbt2rW644YbS9TFjxpjHIUOGmEuJn3nmGdMrxeprYo2UdO3a1VxGHBgYWPozM2fONKGkR48e5uqdAQMGmN4pAAAAl90HxS70QQEAwPXY1gcFAACgIhBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA4xBQAACA+weU+vXry8vL66xlxIgRZn/37t3P2vfII49UdBkAAMCF+Vb0C65Zs0aFhYWl65s3b9aNN96oO++8s3Tbgw8+qPHjx5euV61ataLLAAAALqzCA0rNmjXLrE+cOFENGzbU9ddfXyaQREVFVfQvDQAA3ESlzkHJy8vTjBkz9MADD5hTOSVmzpypiIgItWzZUmPHjtWJEycqswwAAODpIyhnmjNnjo4fP66hQ4eWbrvnnntUr149RUdHa+PGjXr22WeVmJiozz///Lyvk5uba5YSGRkZlVk2AACwmVdxcXFxZb1479695e/vr3nz5p33mMWLF6tHjx5KSkoyp4LO5aWXXtK4cePO2p6enq7g4OAKrRkAAFQOa4AhJCTkor6/K+0Uz969e/Xf//5Xv/3tby94XKdOncyjFVDOxzoNZL2ZkiU5ObnC6wUAAB5wimfatGmKjIzUzTfffMHjNmzYYB5r16593mMCAgLMAgAAPEOlBJSioiITUIYMGSJf3//7JXbu3KlZs2apb9++Cg8PN3NQRo8erW7duql169aVUQoAAHBBlRJQrFM7+/btM1fvnMmaj2Lte/PNN5Wdna3Y2FgNGDBAzz//fGWUAQAAXFSlTpJ1wiQbAADgDI6YJAsAAHCpCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMBxCCgAAMD9A8pLL70kLy+vMkvTpk1L9+fk5GjEiBEKDw9X9erVNWDAAKWmplZ0GQAAwIVVyghKixYtdOjQodJl+fLlpftGjx6tefPm6bPPPtPSpUt18OBB3X777ZVRBgAAcFG+lfKivr6Kioo6a3t6erree+89zZo1S7/61a/MtmnTpqlZs2ZatWqVrrnmmsooB0AFyS0o1N6jJ9S4VpDdpQBwc5UygrJjxw5FR0erQYMGGjRokPbt22e2JyQkKD8/Xz179iw91jr9U7duXa1cufK8r5ebm6uMjIwyC4Ar67ukI+rz/77V4H+sVmZOvt3lAHBzFR5QOnXqpOnTp2vBggV6++23tXv3bl133XXKzMxUSkqK/P39FRoaWuZnatWqZfadz4QJExQSElK6xMbGVnTZAM4jLSNHj320XoP+sVq7DmerqFjmEQBc6hRPnz59Sp+3bt3aBJZ69erp008/VZUqVS7pNceOHasxY8aUrlsjKIQUoHIVFBbpw1V79cY3Pyozt0DeXtK919TTmF5NFFLFz+7yALi5SpmDciZrtKRx48ZKSkrSjTfeqLy8PB0/frzMKIp1Fc+55qyUCAgIMAuAK2Pdvp/0/OzN2nro1OnU+JgQvdy/lVrFhNhdGgAPUel9ULKysrRz507Vrl1b7dq1k5+fnxYtWlS6PzEx0cxR6dy5c2WXAuAX/JSdp7Gfb9TtU1aYcBIc6Ks/3dZSnz/ahXACwLVHUJ566in169fPnNaxLiH+wx/+IB8fHw0cONDMHxk2bJg5XRMWFqbg4GCNGjXKhBOu4AHsU1RUrH+t26+JX23Xsew8s+2OdjF6rk9TRVRn9BKAGwSU/fv3mzBy9OhR1axZU127djWXEFvPLX/961/l7e1tGrRZV+f07t1bU6ZMqegyAFykbYcy9MKczVq79yez3qRWkP7Yv6U6xoXZXRoAD+ZVXFxcLBdjTZK1RmOsvirWKAyA8svKLdCbC3/UtBV7VFhUrKr+Phrds7GGdqkvPx/uggHA3u/vSp8kC8BZrP+TfLkpRePnb1FqRq7Z1rdVlF64pblqh1zalXYAUNEIKIAH2X0kWy/O3axvdxwx6/XCq2rcrS3UvUmk3aUBQBkEFMAD5OQXasqSnZq6ZKfyCovk7+ut4dc31PDuDRXo52N3eQBwFgIK4Ob+l5iml/6zxdxDx9KtcU0zahIXUc3u0gDgvAgogJs6ePyk/jh/q77afOo2ElHBgXqxX3P1aRklLy8vu8sDgAsioABuJr+wSNO+2603/7tDJ/IK5ePtpQe61NfjPRuregB/5QG4Bv61AtzI97uP6fk5m/RjapZZb1+vhl6+raWaRnE5PgDXQkAB3MCRrFxN+HK7/r1uv1kPq+avsX2aakDbGHlbd/kDABdDQAFcmNVg7aPv9+nVBduVkVMga2rJ3R3q6tmbmii0qr/d5QHAJSOgAC5q0/50PT93s35IPm7WW0QHmxb1bevWsLs0ALhsBBTAxaSfzNcb3yTqw1V7VVQsBQX46slejTX4mnrypUU9ADdBQAFcqEX93A0H9fIX28ycE8uvr47W7/s2U2RwoN3lAUCFIqAALiApLVPPz9msVbuOmfUGNavp5V+31LWNIuwuDQAqBQEFcLATeQWatDhJ7y7bpYKiYgX6eWvUr67Sg9c1MO3qAcBdEVAAh57OWbg1VePmbdWB4yfNtp7NIvWHfi0UG1bV7vIAoNIRUACHST52wtw7Z9H2NLNeJ7SKXrq1hW5sXsvu0gDgiiGgAA6RW1Cof3y7W5MW71BOfpH8fLzMqZyRv2qkqv78VQXgWfhXD3CA75KO6IW5m7XrcLZZ79wgXH/s30KNIoPsLg0AbEFAAWyUlpFjLhv+zw8HzXpE9QC9cEsz3RofzR2HAXg0Agpgg4LCItNo7fVvflRWboGs2+Xc17m+xvRqrOBAP7vLAwDbEVCAK2zdvp/0/OzN2noow6zHx4bqT/1bqmWdELtLAwDHIKAAV8hP2Xl69evt+uj7ZLMeUsVPz97UVHd3iOWOwwDwMwQUoJLlFxbpXwn7zR2HfzqRb7bd2S5Gz/VpqvDqAXaXBwCOREABKsnJvEJ9smaf3lm2SwfTc8y2JrWC9PJtLdWhfpjd5QGAoxFQgEq42/CHK/do2nd7dDQ7r/TqnOHdG+q+zvXkxx2HAeAXEVCACnI4M1fvLd+tGav2mitzLLFhVfRwt4a6o12MAv187C4RAFwGAQWogNb01mmcT9YmK6+gqPRUjjVickvr2vJlxAQAyo2AAlyiH1MzNXXJTs394aAKi4rNtjZ1Q/Vo90bq0TSSK3MA4DIQUIBy2pB8XFP+l6RvtqaWbrvuqggTTK5pEEYHWACoAAQU4CIUFxdrxc6jmvy/JPNosXLITS2izKmc1jGhdpcIAG6FgAJcQFFRsRZuSzUjJj/sTzfbfL291L9NHT1yfUM1iqxud4kA4JYqfPbehAkT1KFDBwUFBSkyMlL9+/dXYmJimWO6d+9uhsHPXB555JGKLgW4rOZq/07Yr95vLtPDHyaYcBLo562h19bX0mdu0F/ujCecAIArjaAsXbpUI0aMMCGloKBAv/vd79SrVy9t3bpV1apVKz3uwQcf1Pjx40vXq1atWtGlAOWWk1+oT9cm6+9Ld+nA8ZNmW1Cgr+lfcn+XONPPBADgggFlwYIFZdanT59uRlISEhLUrVu3MoEkKiqqon954JJk5OSb/iXvL9+tI1klzdX8NaxrAw26pi53GAYAd5uDkp5+6rx9WFjZ1t4zZ87UjBkzTEjp16+fXnjhhfOOouTm5pqlREbGqbvAApfrSFauCSUfrtyrzNPN1WJqWM3VGujO9rE0VwMAdwwoRUVFeuKJJ9SlSxe1bNmydPs999yjevXqKTo6Whs3btSzzz5r5ql8/vnn553XMm7cuMosFR5m/08n9O6yXfp4TbJyTzdXuyqyurkip198NO3oAcBmXsXW9ZOVZPjw4frqq6+0fPlyxcTEnPe4xYsXq0ePHkpKSlLDhg0vagQlNjbWjM4EBwdXVvlwQ0lpmXp7yS7N3XBABaebq8XHhmpE94bq2awWzdUAoBJZ398hISEX9f1daSMoI0eO1Pz587Vs2bILhhNLp06dzOP5AkpAQIBZgEu1cb/VXG2nvt6aopJI3qVRuEZ0b6TODcNprgYADlPhAcUakBk1apRmz56tJUuWKC4u7hd/ZsOGDeaxdu3aFV0OPJj1Z3HlrqN6e8lOfbvjSOn23i1qma6v1sgJAMBDAop1ifGsWbM0d+5c0wslJSXFbLeGdKpUqaKdO3ea/X379lV4eLiZgzJ69GhzhU/r1q0ruhx4aHO1RdvTNGVJktbvO262+Xh76ddXR2v49Q11Va0gu0sEAFzpOSjnGyqfNm2ahg4dquTkZA0ePFibN29Wdna2mUty22236fnnn7/o+STlOYcFz1FQWKT5Gw+ZYPJjapbZFuDrrd90iNWD1zVQbBi9dgDAY+eg/FLesQKJ1cwNqMjmap8l7Nc7y3Yq+djp5moBvhrcuZ4e6BKnmkHMXwIAV8O9eOCyMnPyNXP1Pr23fLcOZ566yiu8mr8e6BqnwdfUU0gVmqsBgKsioMDlHM3K1fQVe/TBij3KyDnVXK1OaBU91K2B7mofqyr+NFcDAFdHQIHLOHj8pN79dpc++n6fcvJPNVdrWLOahndvZCbA0lwNANwHAQWOt+twlqYu3anZ6w8ov/DUHKfWMSF6tHtD9WoeRXM1AHBDBBQ4duLrksQ0E0q+2Zpa2lytc4NwPXpDQ3VtFEFzNQBwYwQUOEZuQaGW/XhE8zce1H+3pio7r7B0n9WG3gombevWsLVGAMCVQUCBrfIKivRd0hHN23hQC7eklt5RuGTi682ta+uOdjFqTHM1APAoBBTY0lBtxc6jZqTk6y2pSj+ZX7ovKjhQfVvV1i3xtdUmNpTTOADgoQgouCIKi4q1etdRzdt4SF9vSdGx7LzSfVYjtb4to3RLfLTa1a3BpFcAAAEFlXtPnDV7jumLTYf05aYUHck61UytpKHaTVYoaR2tjnFh5l45AACUIKCgwkPJ+uSfzD1xvtx0SKkZ/xdKQqv66aYWp0LJNQ3C5EvfEgDAeRBQUCH3X9q4P93MKfli4yEdTM8p3RcU6KveJpTUVpdGETRTAwBcFAIKLjmUbDmYYUZKvth0sPQmfZbqAb66sXkt3dyqtq5rHKEAX1rPAwDKh4CCcoWSxNRMzf/BCiWHtPtIdum+Kn4+6nk6lHRvUlOBfoQSAMClI6DgFyWlZWre6VCSlJZVuj3A11u/ahpp5pRYj9ykDwBQUQgoOCdrdOSLjQfNKZztKZml2/19vHV9k5pmTonV3bVaAH+EAAAVj28XlEo+dsIEEmuyqzW/pISfj5euu+p0KGleS8GBfrbWCQBwfwQUD3fg+El9eTqU/LA/vXS71ZfEuurGCiW9m0cppCqhBABw5RBQPFBqRo65HNgKJev2HS/dbvVK69ww3MwpsS4NDqvmb2udAADPRUDxEIczc/XV5kPmCpw1e4+puPjUdutWNx3rh5k281YTNavtPAAAdiOguDHrfjdWKLFGS1btOqqi06HE0r5eDXOnYOvGfLWCA+0sEwCAsxBQ3KhHSUpGjunouml/utbt+0mrdx8zN+krcXVsqJlTYoWS6NAqttYLAMCFEFBcVFpmjgkiJpAcOPV45s34SrSqE2JGSqwGarFhVW2pFQCA8iKguICjWbkmhJhAcvrRGi35OevKm8a1gtS6TohaxoToukYRqh9RzZaaAQC4HAQUh0k/kX9qROTA8dIREutS4J+zrrhpFFldreqEqnVMiFrFhKh57WBazAMA3AIBxUaZOfnafCBDmw4cLz1Vs/foiXMe26BmNTMy0irmVCCxwghdXAEA7opvuCvkRF6Bth7MMM3QNu0/bk7V7Dr8fzfbO1O98Kpm7ogZGakTqhZ1guneCgDwKASUSpCTX6hth6yRkdOTWPena0daZpnLfEvUCa1iwoh1iiY+JlQt6wQrtCoN0gAAno2AcpnyCoqUmJJZZs7Ij6mZKjhHGqkVHFBmzogVTCKq0xgNAICfI6CUQ35hkXakZpWZM7L9UKbyCovOOja8mv/pIBJ6eu5ICA3RAAC4SASU87AanO08nHX6FM2pOSPWHJLcgrPDSGhVvzJzRqzH2iGB8rL6yAMAgHIjoJwhYe9Ppi28NUJiXV1zMr/wrGOCAnxPnZ6JCVHr02EkpkYVwggAAO4SUCZPnqzXXntNKSkpio+P16RJk9SxY0fb6tlyMF3vf7e7dL2qv49aWiMjp0/RtI4JVb2wqvK2mpAAAAD3CyiffPKJxowZo6lTp6pTp05688031bt3byUmJioyMtKWmjrFhWvotfXNqIi1xEVUN91ZAQDAleVVbN1lzgZWKOnQoYPeeusts15UVKTY2FiNGjVKzz333AV/NiMjQyEhIUpPT1dwcPAVqhgAAFyO8nx/e8sGeXl5SkhIUM+ePf+vEG9vs75y5cqzjs/NzTVv6swFAAC4L1sCypEjR1RYWKhatWqV2W6tW/NRfm7ChAkmcZUs1kgLAABwX7YElPIaO3asGQ4qWZKTk+0uCQAAuNsk2YiICPn4+Cg1NbXMdms9KirqrOMDAgLMAgAAPIMtIyj+/v5q166dFi1aVLrNmiRrrXfu3NmOkgAAgIPYdpmxdYnxkCFD1L59e9P7xLrMODs7W/fff79dJQEAAE8PKL/5zW90+PBhvfjii2Zi7NVXX60FCxacNXEWAAB4Htv6oFwO+qAAAOB6HN8HBQAA4EIIKAAAwHEIKAAAwHEIKAAAwHEIKAAAwHFsu8z4cpRceMRNAwEAcB0l39sXcwGxSwaUzMxM88hNAwEAcM3vcetyY7frg2K1xT948KCCgoLk5eVV4enOCj7WDQnpsWI/Pg9n4fNwFj4PZ+Hz+GVW5LDCSXR0tLy9vd1vBMV6UzExMZX6a1h/uPgD5hx8Hs7C5+EsfB7OwudxYb80clKCSbIAAMBxCCgAAMBxCCg/ExAQoD/84Q/mEfbj83AWPg9n4fNwFj6PiuWSk2QBAIB7YwQFAAA4DgEFAAA4DgEFAAA4DgEFAAA4DgHlDJMnT1b9+vUVGBioTp066fvvv7e7JI80YcIEdejQwXQKjoyMVP/+/ZWYmGh3WTht4sSJpoPzE088YXcpHu3AgQMaPHiwwsPDVaVKFbVq1Upr1661uyyPVFhYqBdeeEFxcXHms2jYsKH++Mc/XtT9ZnB+BJTTPvnkE40ZM8ZcIrZu3TrFx8erd+/eSktLs7s0j7N06VKNGDFCq1at0sKFC5Wfn69evXopOzvb7tI83po1a/T3v/9drVu3trsUj/bTTz+pS5cu8vPz01dffaWtW7fq9ddfV40aNewuzSO98sorevvtt/XWW29p27ZtZv3VV1/VpEmT7C7NpXGZ8WnWiIn1v3brD1jJ/X6seyqMGjVKzz33nN3lebTDhw+bkRQruHTr1s3ucjxWVlaW2rZtqylTpujll1/W1VdfrTfffNPusjyS9W/Sd999p2+//dbuUiDplltuUa1atfTee++VbhswYIAZTZkxY4attbkyRlAk5eXlKSEhQT179ixzvx9rfeXKlbbWBik9Pd08hoWF2V2KR7NGtW6++eYyf09gj//85z9q37697rzzThPe27Rpo3fffdfusjzWtddeq0WLFunHH3806z/88IOWL1+uPn362F2aS3PJmwVWtCNHjphziFYCPpO1vn37dtvqwqmRLGuugzWc3bJlS7vL8Vgff/yxOfVpneKB/Xbt2mVOKVinpX/3u9+Zz+Wxxx6Tv7+/hgwZYnd5HjmiZd3JuGnTpvLx8THfJ3/60580aNAgu0tzaQQUOP5/7Zs3bzb/G4E9rFvHP/7442Y+kDWBHM4I7tYIyp///Gezbo2gWH9Ppk6dSkCxwaeffqqZM2dq1qxZatGihTZs2GD+YxUdHc3ncRkIKJIiIiJM6k1NTS2z3VqPioqyrS5PN3LkSM2fP1/Lli1TTEyM3eV4LOv0pzVZ3Jp/UsL6H6L1uVhztnJzc83fH1w5tWvXVvPmzctsa9asmf7973/bVpMne/rpp80oyt13323WrSuq9u7da65IJKBcOuagSGZYtF27duYc4pn/Q7HWO3fubGttnsiat22Fk9mzZ2vx4sXm0j3Yp0ePHtq0aZP5X2HJYv3v3Rq+tp4TTq4865Tnzy+9t+Y/1KtXz7aaPNmJEyfMvMUzWX8vrO8RXDpGUE6zzuVaSdf6h7djx47m6gTrstb777/f7tI88rSONVQ6d+5c0wslJSXFbA8JCTGz4nFlWZ/Bz+f/VKtWzfTfYF6QPUaPHm0mZlqneO666y7Ts+mdd94xC668fv36mTkndevWNad41q9frzfeeEMPPPCA3aW5NusyY5wyadKk4rp16xb7+/sXd+zYsXjVqlV2l+SRrD+W51qmTZtmd2k47frrry9+/PHH7S7Do82bN6+4ZcuWxQEBAcVNmzYtfuedd+wuyWNlZGSYvw/W90dgYGBxgwYNin//+98X5+bm2l2aS6MPCgAAcBzmoAAAAMchoAAAAMchoAAAAMchoAAAAMchoAAAAMchoAAAAMchoAAAAMchoAAAAMchoAAAAMchoAAAAMchoAAAAMchoAAAADnN/wfadIPWG1L6BQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 准备含缺失值的数据\n",
    "sr_data=pd.Series([2,8,18,32,50,None,None,128,162,200],index=range(0,10))\n",
    "sr_data.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ab6fee50",
   "metadata": {},
   "source": [
    "#### 5.4.1 线性插值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "61d33e29",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 1找出非缺失值和它们的序号\n",
    "existing_vals = sr_data[sr_data.notnull()]\n",
    "existing_idx = existing_vals.index\n",
    "# 2建立线性插值模型\n",
    "linear_interp_model= interp1d(existing_idx,existing_vals,kind='linear')\n",
    "# 3找出缺失值的序号\n",
    "missing_vals=sr_data[sr_data.isnull()]\n",
    "missing_idx=missing_vals.index\n",
    "# 4线性插值模型，计算缺失值\n",
    "interp_vals=linear_interp_model(missing_idx)\n",
    "# 5将缺失值替换为线性插值结果\n",
    "sr_data.loc[missing_idx]=interp_vals\n",
    "sr_data.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3db02f76",
   "metadata": {},
   "source": [
    "#### 5.4.2 拉格朗日插值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f86727dd",
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.interpolate import lagrange"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6d4789db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 1找出非缺失值和它们的序号\n",
    "existing_vals = sr_data[sr_data.notnull()]\n",
    "existing_idx = existing_vals.index\n",
    "existing_vals.index=[i for i in range(len(existing_vals))]\n",
    "# 2建立拉格朗日插值模型\n",
    "# 注意，vals的索引必须是连续的\n",
    "lag_model = lagrange(existing_idx, existing_vals)\n",
    "\n",
    "# 3用拉格朗日插值模型填充缺失值\n",
    "for idx in sr_data[sr_data.isnull()].index:\n",
    "    sr_data[idx] = lag_model(idx)\n",
    "sr_data.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5bc3dd03",
   "metadata": {},
   "source": [
    "## 6. 异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "738d6624",
   "metadata": {},
   "outputs": [],
   "source": [
    "def outRange(sr_x):\n",
    "    # （拉依达准则）筛选异常值\n",
    "    outlier_jugd = (sr_x<sr_x.mean()-3*sr_x.std()) | (sr_x>sr_x.mean()+3*sr_x.std())\n",
    "    print('\\n(1.1) 查看 “sr_异常值判定” 前5个元素 \\n',outlier_jugd[:5])         \n",
    "\n",
    "    # 筛选异常值\n",
    "    outlier_vals = sr_x.loc[outlier_jugd]      \n",
    "    return outlier_vals"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6aeb7ac2",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_点菜详情表 = pd.read_csv(r\"C:\\Users\\zhengyang\\learning\\Python\\src\\data\\detail.csv\",encoding = 'utf-8')\n",
    "sr_菜数=df_点菜详情表 ['counts']\n",
    "#系列中一共有10037个元素\n",
    "sr_异常菜数= outRange(sr_菜数)\n",
    "\n",
    "print('\\n(2.1) 使用拉依达准则判定异常值个数为:',sr_异常菜数.shape[0])\n",
    "print('\\n(2.2) 异常值系列：\\n',sr_异常菜数)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e8ca878f",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "mining",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
